import java.util.Scanner;

//     二叉树遍历
//     描述
//     编一个程序，读入用户输入的一串先序遍历字符串，根据此字符串建立一个二叉树（以指针方式存储）。 例如如下的先序遍历字符串： ABC##DE#G##F###
//     其中“#”表示的是空格，空格字符代表空树。建立起此二叉树以后，再对二叉树进行中序遍历，输出遍历结果。
//     输入描述：输入包括1行字符串，长度不超过100。
//     输出描述：可能有多组测试数据，对于每组数据， 输出将输入字符串建立二叉树后中序遍历的序列，每个字符后面都有一个空格。 每个输出结果占一行。
//     示例1
//     输入：abc##de#g##f###
//     输出：c b e g d f a

public class Demo04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            String str=sc.nextLine();
            TreeNode1 root = createTree(str);
            inOrder(root);
        }
    }
    public static int i = 0;
    public static TreeNode1 createTree(String str) {
        TreeNode1 root = null;
        if(str.charAt(i) != '#') {
            root = new TreeNode1(str.charAt(i));
            i++;
            root.left = createTree(str);
            root.right = createTree(str);
        }else {
            i++;
        }
        return root;
    }
    public static void inOrder(TreeNode1 root) {
        if(root==null){
            return;
        }
        inOrder(root.left);
        System.out.print((char)(root.val));
        System.out.print(" ");
        inOrder(root.right);
    }
}
class TreeNode1{
    int val;
    TreeNode1 left;
    TreeNode1 right;
    TreeNode1(){}
    TreeNode1(int val){
        this.val=val;
    }
    TreeNode1(int val,TreeNode1 left,TreeNode1 right){
        this.val=val;
        this.left=left;
        this.right=right;
    }
}






